# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/16 18:52 
@Author  : ZhangShenao 
@File    : 1.通过代理实现ReAct框架.py 
@Desc    : 通过代理实现ReAct框架
"""

import os

import dotenv
from langchain.agents import initialize_agent, AgentType
from langchain.agents import load_tools
from langchain_openai import ChatOpenAI

# 加载环境变量
dotenv.load_dotenv()

# 创建LLM
llm = ChatOpenAI(model_name='gpt-3.5-turbo', openai_api_base=os.getenv('OPENAI_API_BASE'))

# 加载Agent需要使用的工具
# 这里加载了serpapi搜索工具和llm-math数学运算工具
tools = load_tools(tool_names=['serpapi', 'llm-math'], llm=llm)

# 使用工具、LLM和代理类型,初始化代理
# ZERO_SHOT_REACT_DESCRIPTION类型的智能代理在LangChain中,可以自动形成一个完善的思考与行动链条
agent = initialize_agent(tools=tools,
                         llm=llm,
                         agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
                         verbose=True)

# 执行代理
print(agent.run('目前市场上玫瑰花的平均价格是多少？如果我在此基础上加价15%卖出，应该如何定价？'))
